package funcionario;

import java.util.ArrayList;

public class RepositorioFuncionario implements IFuncionario {

	private static ArrayList<Funcionario> listaFuncionarios = new ArrayList<Funcionario>();
	private static int ContID = +1;
	private Funcionario func;

	@Override
	public void adicionar(Funcionario funcionario) {
		funcionario.setId(ContID);
		listaFuncionarios.add(funcionario);
		this.ContID++;
	}

	@Override
	public void editar(Funcionario funcionario) {
		this.func = pesquisar(funcionario.getId());
		int index = listaFuncionarios.indexOf(this.func);
		listaFuncionarios.set(index, funcionario);
	}

	@Override
	public void remover(int idFuncionario) {
		this.func = pesquisar(idFuncionario);
		listaFuncionarios.remove(func);
	}

	@Override
	public boolean existe(int IdFuncionario) {
		boolean res = false;
		this.func = null;
		this.func = pesquisar(IdFuncionario);
		if (this.func != null) {
			res = true;
		}
		return res;
	}

	@Override
	public Funcionario pesquisar(int idFuncionario) {
		this.func = null;
		for (Funcionario func : listaFuncionarios) {
			if (func.getId() == idFuncionario) {
				this.func = func;
				break;
			}
		}
		return this.func;
	}

	@Override
	public ArrayList<Funcionario> listar() {
		return this.listaFuncionarios;
	}

	@Override
	public ArrayList<Funcionario> listar(String nome) {
		ArrayList<Funcionario> funcionarios = new ArrayList<Funcionario>();
		int tam = nome.trim().length();
		for (Funcionario func : this.listaFuncionarios) {
			int tamFunc = func.getNome().trim().length();
			String nomeLista = func.getNome().trim()
					.substring(0, (tam <= tamFunc) ? tam : tamFunc)
					.toLowerCase();
			if (nomeLista.equals(nome.trim().toLowerCase())) {
				funcionarios.add(func);
			}
		}
		return funcionarios;
	}

	@Override
	public boolean funcionarioTemEndereco(int idEndereco) {
		boolean res = false;
		for (Funcionario func : this.listaFuncionarios) {
			if (func.getEndereco().getId() == idEndereco) {
				res = true;
				break;
			}
		}
		return res;
	}

}
